home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / forlib1.arc / STRING.ASM < prev    next >
Assembly Source File  |  1986-01-15  |  1KB  |  64 lines

  1. DATA SEGMENT PUBLIC 'DATA'
  2. TITLE__ DB 'TITLE: STRING MANIPULATION FOR MS FORTRAN'
  3. COPY_R  DB '   (C) John R. Petrocelli'
  4.         DB '       Schenectady,NY    '
  5.         DB '       01/13/86          '
  6.        SOURCE_START DB ?
  7.        SOURCE_COUNT DB ?
  8.        TARGET_START DB ?
  9.        TARGET_COUNT DB ?
  10.        MISMATCH_MSG DB '  ** SUBSTR SOURCE/TARGET LENGTH MISMATCH$'
  11. DATA ENDS
  12. DGROUP GROUP DATA
  13. CODE   SEGMENT 'CODE'
  14.        ASSUME CS:CODE,DS:DGROUP,SS:DGROUP
  15. PUBLIC SUBSTR
  16. SUBSTR PROC FAR
  17.        PUSH BP
  18.        PUSH AX
  19.        PUSH BX
  20.        PUSH CX
  21.        PUSH DX
  22.        PUSH DS
  23.        MOV BP,SP
  24.        LES BX,DWORD PTR[BP+16]
  25.        MOV AL,[BX]
  26.        LES BX,DWORD PTR[BP+20]
  27.        MOV BL,[BX]
  28.        MOV SOURCE_START,BL
  29.        SUB AL,BL
  30.        ADD AL,01
  31.        MOV SOURCE_COUNT,AL
  32.        LES BX,DWORD PTR[BP+28]
  33.        MOV AL,[BX]
  34.        LES BX,DWORD PTR[BP+32]
  35.        MOV BL,[BX]
  36.        MOV TARGET_START,BL
  37.        SUB AL,BL
  38.        ADD AL,01
  39.        MOV TARGET_COUNT,AL
  40.        CMP SOURCE_COUNT,AL
  41.        JNZ MISMATCH
  42.        MOV CH,00
  43.        MOV CL,TARGET_COUNT
  44.        LES SI,DWORD PTR[BP+24]
  45.        LDS DI,DWORD PTR[BP+36]
  46.        CLD
  47. ; REP  MOVS [DI],[SI]
  48.   REP  MOVSB
  49. QUIT:  POP DS
  50.        POP DX
  51.        POP CX
  52.        POP BX
  53.        POP AX
  54.        POP BP
  55.        RET 24
  56. MISMATCH:
  57.        LEA DX,MISMATCH_MSG
  58.        MOV AX,0900H
  59.        INT 21H
  60.        JMP QUIT
  61.        SUBSTR ENDP
  62.        CODE ENDS
  63. END
  64.